## Check how we dump regular ELF section flags.

# RUN: yaml2obj %s -o %t.o
# RUN: llvm-readobj -S %t.o | FileCheck --check-prefix=LLVM %s
# RUN: llvm-readelf -S %t.o | FileCheck --check-prefix=GNU %s

# LLVM:      Name: allflags
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x80200FF7)
# LLVM-NEXT:   SHF_ALLOC (0x2)
# LLVM-NEXT:   SHF_COMPRESSED (0x800)
# LLVM-NEXT:   SHF_EXCLUDE (0x80000000)
# LLVM-NEXT:   SHF_EXECINSTR (0x4)
# LLVM-NEXT:   SHF_GNU_RETAIN (0x200000)
# LLVM-NEXT:   SHF_GROUP (0x200)
# LLVM-NEXT:   SHF_INFO_LINK (0x40)
# LLVM-NEXT:   SHF_LINK_ORDER (0x80)
# LLVM-NEXT:   SHF_MERGE (0x10)
# LLVM-NEXT:   SHF_OS_NONCONFORMING (0x100)
# LLVM-NEXT:   SHF_STRINGS (0x20)
# LLVM-NEXT:   SHF_TLS (0x400)
# LLVM-NEXT:   SHF_WRITE (0x1)
# LLVM-NEXT: ]

# LLVM:      Name: noflags
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x0)
# LLVM-NEXT: ]

# LLVM:      Name: write
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x1)
# LLVM-NEXT:   SHF_WRITE (0x1)
# LLVM-NEXT: ]

# LLVM:      Name: alloc
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x2)
# LLVM-NEXT:   SHF_ALLOC (0x2)
# LLVM-NEXT: ]

# LLVM:      Name: exec
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x4)
# LLVM-NEXT:   SHF_EXECINSTR (0x4)
# LLVM-NEXT: ]

# LLVM:      Name: merge
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x10)
# LLVM-NEXT:   SHF_MERGE (0x10)
# LLVM-NEXT: ]

# LLVM:      Name: strings
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x20)
# LLVM-NEXT:   SHF_STRINGS (0x20)
# LLVM-NEXT: ]

# LLVM:      Name: infolink
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x40)
# LLVM-NEXT:   SHF_INFO_LINK (0x40)
# LLVM-NEXT: ]

# LLVM:      Name: linkorder
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x80)
# LLVM-NEXT:   SHF_LINK_ORDER (0x80)
# LLVM-NEXT: ]

# LLVM:      Name: nonconforming
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x100)
# LLVM-NEXT:   SHF_OS_NONCONFORMING (0x100)
# LLVM-NEXT: ]

# LLVM:      Name: group
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x200)
# LLVM-NEXT:   SHF_GROUP (0x200)
# LLVM-NEXT: ]

# LLVM:      Name: tls
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x400)
# LLVM-NEXT:   SHF_TLS (0x400)
# LLVM-NEXT: ]

# LLVM:      Name: compressed
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x800)
# LLVM-NEXT:   SHF_COMPRESSED (0x800)
# LLVM-NEXT: ]

## SHF_GNU_RETAIN is defined in the OS-specific range, but we treat it generic
## and allow it to be used with OSABI values other than GNU and FREEBSD.
# LLVM:      Name: retain
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x200000)
# LLVM-NEXT:   SHF_GNU_RETAIN (0x200000)
# LLVM-NEXT: ]

# LLVM:      Name: exclude
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x80000000)
# LLVM-NEXT:   SHF_EXCLUDE (0x80000000)
# LLVM-NEXT: ]

# LLVM:      Name: unknown
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0xF0000)
# LLVM-NEXT: ]

# GNU: [Nr] Name          Type     Address          Off    Size   ES Flg          Lk Inf Al
# GNU: [ 1] allflags      PROGBITS 0000000000000000 000040 000000 00 WAXMSILOGTCRE 0   0  0
# GNU: [ 2] noflags       PROGBITS 0000000000000000 000040 000000 00              0   0  0
# GNU: [ 3] write         PROGBITS 0000000000000000 000040 000000 00 W            0   0  0
# GNU: [ 4] alloc         PROGBITS 0000000000000000 000040 000000 00 A            0   0  0
# GNU: [ 5] exec          PROGBITS 0000000000000000 000040 000000 00 X            0   0  0
# GNU: [ 6] merge         PROGBITS 0000000000000000 000040 000000 00 M            0   0  0
# GNU: [ 7] strings       PROGBITS 0000000000000000 000040 000000 00 S            0   0  0
# GNU: [ 8] infolink      PROGBITS 0000000000000000 000040 000000 00 I            0   0  0
# GNU: [ 9] linkorder     PROGBITS 0000000000000000 000040 000000 00 L            0   0  0
# GNU: [10] nonconforming PROGBITS 0000000000000000 000040 000000 00 O            0   0  0
# GNU: [11] group         PROGBITS 0000000000000000 000040 000000 00 G            0   0  0
# GNU: [12] tls           PROGBITS 0000000000000000 000040 000000 00 T            0   0  0
# GNU: [13] compressed    PROGBITS 0000000000000000 000040 000000 00 C            0   0  0
# GNU: [14] retain        PROGBITS 0000000000000000 000040 000000 00 R            0   0  0
# GNU: [15] exclude       PROGBITS 0000000000000000 000040 000000 00 E            0   0  0
# GNU: [16] unknown       PROGBITS 0000000000000000 000040 000000 00 x            0   0  0

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_REL
  Flags: []
Sections:
  - Name:  allflags
    Type:  SHT_PROGBITS
    Flags: [ SHF_WRITE, SHF_ALLOC, SHF_EXECINSTR, SHF_MERGE,
            SHF_STRINGS, SHF_INFO_LINK, SHF_LINK_ORDER, SHF_OS_NONCONFORMING,
            SHF_GROUP, SHF_TLS, SHF_COMPRESSED, SHF_GNU_RETAIN, SHF_EXCLUDE ]
  - Name:  noflags
    Type:  SHT_PROGBITS
    Flags: [ ]
  - Name:  write
    Type:  SHT_PROGBITS
    Flags: [ SHF_WRITE ]
  - Name:  alloc
    Type:  SHT_PROGBITS
    Flags: [ SHF_ALLOC ]
  - Name:  exec
    Type:  SHT_PROGBITS
    Flags: [ SHF_EXECINSTR ]
  - Name:  merge
    Type:  SHT_PROGBITS
    Flags: [ SHF_MERGE ]
  - Name:  strings
    Type:  SHT_PROGBITS
    Flags: [ SHF_STRINGS ]
  - Name:  infolink
    Type:  SHT_PROGBITS
    Flags: [ SHF_INFO_LINK ]
  - Name:  linkorder
    Type:  SHT_PROGBITS
    Flags: [ SHF_LINK_ORDER ]
  - Name:  nonconforming
    Type:  SHT_PROGBITS
    Flags: [ SHF_OS_NONCONFORMING ]
  - Name:  group
    Type:  SHT_PROGBITS
    Flags: [ SHF_GROUP ]
  - Name:  tls
    Type:  SHT_PROGBITS
    Flags: [ SHF_TLS ]
  - Name:  compressed
    Type:  SHT_PROGBITS
    Flags: [ SHF_COMPRESSED ]
  - Name:  retain
    Type:  SHT_PROGBITS
    Flags: [ SHF_GNU_RETAIN ]
  - Name:  exclude
    Type:  SHT_PROGBITS
    Flags: [ SHF_EXCLUDE ]
  - Name:  unknown
    Type:  SHT_PROGBITS
    ShFlags: 0x000f0000
